package com.hmy.infrastructure.common.properties;

import com.hmy.infrastructure.common.constant.AliEmasConstant;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotBlank;

@Data
@Component
@Validated
@ConfigurationProperties(prefix = "aliyun.emas")
public class AliEMASPushProperties {

    /**
     * accessKeyId
     */
    @NotBlank
    private String accessKeyId;

    /**
     * accessKeySecret
     */
    @NotBlank
    private String accessKeySecret;

    /**
     * 服务地址,参考url:https://api.aliyun.com/product/Push
     */
    @NotBlank
    private String regionId ;

    /**
     * ios appkey,
     * todo:这边测试环境和线上环境需要隔离下。
     */
    @NotBlank
    private String iosAppKey;

    /**
     * Android appkey
     */
    @NotBlank
    private String androidAppKey;

    /**
     * 推送类型
     * MESSAGE表示消息;
     * NOTICE表示通知;
     */
    @NotBlank
    private String pushType = AliEmasConstant.ALI_EMAS_PUSH_TYPE_MESSAGE;

    /**
     * 设备类型，取值范围为：
     * iOS：iOS设备
     * ANDROID：Android设备
     * ALL：全部设备类型
     */
    private String deviceType = AliEmasConstant.ALI_EMAS_PUSH_DEVICE_TYPE_ALL;

    /**
     * 离线消息、通知是否保存。StoreOffline ali_emas默认设置为false。
     * 若保存，在推送时候用户不在线，在过期时间（ExpireTime）内用户上线时会被再次发送。
     * ExpireTime默认为72小时。iOS通知走APNs链路，不受StoreOffline影响。
     */
    private Boolean storeOffline = Boolean.TRUE;

    /**
     * 消息推送时设备不在线（即与移动推送的服务端的长连接通道不通），
     * 则这条推送会做为通知，通过苹果的APNs通道送达一次。
     */
    private Boolean iosRemind = Boolean.TRUE;

    /**
     * 推送类型为消息时设备不在线，则这条推送会使用辅助弹窗功能。默认值为false，仅当PushType=MESSAGE时生效。
     * <p>
     * 如果消息转通知推送成功，
     * 收到通知是展示的数据为服务端设置的AndroidPopupTitle和AndroidPopupBody参数值，
     * 点击通知在辅助弹窗的onSysNoticeOpened方法中获取到的数据是服务端设置的Title和Body参数值。
     */
    private Boolean androidRemind = Boolean.TRUE;

    /**
     * 消息推送类型@see AliEmasConstant,这么暂时默认为推送设备。
     */
    private String target = AliEmasConstant.ALI_EMAS_PUSH_Target_DEVICE;

    @NotBlank
    private String iOSApnsEnv = AliEmasConstant.EMAS_DEV;

    /**
     * 设置通知类型
     * 0：正式通知（默认）。
     * 1：测试通知。
     */
    private Integer androidTargetUserType = 1;

}
